package it.unipd.dei.bd.icineasti.servlet;

import it.unipd.dei.bd.icineasti.database.UpdateUtenteDatabase;
import it.unipd.dei.bd.icineasti.resource.Utente;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Timestamp;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.codec.digest.DigestUtils;
import javax.servlet.http.HttpSession;

/**
 * Aggiorna i dati di un utente.
 * 
 * TODO: verificare se alcuni dati vadano considerati IMMUTABILI.
 * TODO: valutare se alcuni dati non debbano alterare il valore di "verificato".
 * 
 * @author Bardelle Renzo
 * @version 1.00
 */

public class UpdateUtenteServlet extends AbstractDatabaseServlet {

	public void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		res.setContentType("text/html");

		PrintWriter out = res.getWriter();
		
		HttpSession session = req.getSession(true);
		
		if(session.getAttribute("id_utente") != null)
		{
			int id=(Integer)session.getAttribute("id_utente");
			String email=req.getParameter("email");
			String password=(String)session.getAttribute("password");
			if(req.getParameter("password") != null && req.getParameter("password") != "")
				password=DigestUtils.md5Hex(req.getParameter("password"));
			String cognome=req.getParameter("cognome");
			String nome=req.getParameter("nome");
			String codfiscale=req.getParameter("codfiscale");
			String cartacredito=req.getParameter("cartacredito");
			Timestamp ultimoaccesso=new Timestamp(System.currentTimeMillis());
			boolean attivo=true;
			boolean newsletter=(Boolean.valueOf(req.getParameter("newsletter"))).booleanValue();
			boolean amministrativo=false;
			boolean verificato=false;
			
			Utente u = new Utente(id, email, password, cognome, nome, codfiscale, cartacredito, ultimoaccesso, attivo, newsletter, amministrativo, verificato);
			
			Connection con = null;
		
			try {
				con = DS.getConnection();

				new UpdateUtenteDatabase(con, u).updateUtente();
				
				session.putValue("email_utente", email);
				session.putValue("cognome_utente", cognome);
				session.putValue("nome_utente", nome);
				session.putValue("codfiscale_utente", codfiscale);
				session.putValue("cartacredito_utente", cartacredito);
				session.putValue("newsletter_utente", newsletter);
				session.putValue("password", password);
				session.putValue("utente", nome+" "+cognome);

			} catch (NullPointerException ex) {
				out.printf("<p>Impossibile creare la connessione al database.</p>");
			} catch (SQLException ex) {
				out.printf(
						"<p>Errore durante l'accesso al database: %s</p>",
						ex.getMessage());
			}
		}
		else
		{
			out.print("<p>Devi effettuare il login per poter modificare i tuoi dati!</p>");
		}
		
		out.flush();
		out.close();
	}

}
